package cap5;

public class MEHospital {
		//Atributos de instancia   
		protected MaquinaExpendedora[] T;
		//Constructor
		public MEHospital(int max){
		   T = new MaquinaExpendedora[max];}
		
		//Comandos
		public void instalar(MaquinaExpendedora unaME, int p) {
		/* asigna la máquina unaME al pasillo p. 
		Requiere 0<=p<cantPasillos() y T[p] no ligado y unaME no está asignada previamente a un pasillo.  */
		    T[p] = unaME;}
		
		public void retirar(int p){
		/* asigna nulo al pasillo p. Requiere 0<=p<cantPasillos()*/
		   T[p] = null;}
		
		public void retirar(MaquinaExpendedora unaME){
		/* busca la máquina unaME y si la encuentra asigna nulo al pasillo.*/
		int i = 0; boolean esta=false; 
		while (i < T.length && !esta){
		   if (T[i] != null)
		     esta = unaME == T[i] ;
		   i++;}
		if (esta)
			   T[i--] = null;}
		
			//Consultas
			public int cantPasillos (){
			/* retorna la cantidad total de pasillos*/
			  return T.length;}
			
			public int cantME(){
			/*Retorna la cantidad de pasillos que tienen instalada una máquina*/
			  int cant = 0;
			  for (int i=0; i<cantPasillos();i++)
			    if (T[i] != null) cant++;
			  return cant;}
			
			public boolean hayPasilloLibre(){
			/*Retorna true si al menos un pasillo está libre*/
			int i = 0; boolean libre=false; 
			while (i < cantPasillos() && !libre){
			   if (T[i] == null)
			     libre = true ;
			   i++;}
			return libre;}
			
			public boolean estaME(MaquinaExpendedora unaME){
			/*Retorna true si la máquina unaME está asignada a un pasillo*/
			int i = 0; boolean esta=false; 
			while (i < cantPasillos() && !esta){
			   if (T[i] != null)
			     esta = unaME ==T[i] ;
			   i++;}
			return esta;}
			
			public int totalCafe(){
			/*Computa la cantidad total de café disponible en las máquinas asignadas a pasillos */
			  int cant = 0;
			  for (int i=0; i < cantPasillos();i++)
			    if (T[i] != null) cant += T[i].obtenerCantCafe();
			  return cant;
			}
			
			public  int cantMasVasosCafe (int v){
			/* Computa la cantidad de máquinas expendedoras que tienen 
			  capacidad para preparar al menos v vasos de cafe*/
			  int c = 0; 
			  for (int i = 0; i < cantPasillos();i++) 
			    if (T[i] != null && T[i].vasosCafe() > v)
			      c++;
			  return c;
			 }
			
			public int totalVasosMateCocido(){
				/*Retorna la cantidad vasos de mate cocido que pueden prepararse con la yerba de todas las máquinas*/
				  int cant = 0;
				  for (int i=0; i< maxElementos();i++)
				    if (T[i] != null) cant += T[i].vasosMateCocido();
				  return cant;
				}
			}